{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "4c9e3f0c",
   "metadata": {},
   "source": [
    "加载并分割数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "7660fab5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x shape: (150, 2), y shape: (150,)\n",
      "x_1： 最小值4.30，最大值7.90，均值5.84，个数150\n",
      "x_2： 最小值2.00，最大值4.40，均值3.06，个数150\n",
      "x_train shape: (100, 2), y_train shape: (100,)\n",
      "x_test shape: (50, 2), y_test shape: (50,)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.datasets import load_iris\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "ds = load_iris()\n",
    "x, y = ds.data[:, 0:2], ds.target\n",
    "x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1, test_size=50)\n",
    "\n",
    "print(f\"x shape: {x.shape}, y shape: {y.shape}\")\n",
    "print(f\"x_1： 最小值{x[:, 0].min():.2f}，最大值{x[:, 0].max():.2f}，均值{x[:, 0].mean():.2f}，个数{x[:, 0].shape[0]}\")\n",
    "print(f\"x_2： 最小值{x[:, 1].min():.2f}，最大值{x[:, 1].max():.2f}，均值{x[:, 1].mean():.2f}，个数{x[:, 1].shape[0]}\")\n",
    "print(f\"x_train shape: {x_train.shape}, y_train shape: {y_train.shape}\")\n",
    "print(f\"x_test shape: {x_test.shape}, y_test shape: {y_test.shape}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be932ce6",
   "metadata": {},
   "source": [
    "训练并评估模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "5493451b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "模型预测准确率（Score）：0.78\n",
      "模型预测准确率（Accuracy）：0.78\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "model = LogisticRegression()\n",
    "model.fit(x_train, y_train)\n",
    "\n",
    "mc = model.score(x_test, y_test)\n",
    "ac = accuracy_score(y_test, model.predict(x_test))\n",
    "print(f\"模型预测准确率（Score）：{mc}\")\n",
    "print(f\"模型预测准确率（Accuracy）：{ac}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c5b8f909",
   "metadata": {},
   "source": [
    "分类预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "83e37904",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "t1： 最小值4.00，最大值8.00，均值6.00，个数500\n",
      "t2： 最小值1.50，最大值5.00，均值3.25，个数500\n"
     ]
    }
   ],
   "source": [
    "# 导入Matplotlib与NumPy库\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.colors import ListedColormap\n",
    "import numpy as np\n",
    "# 绘制分类界面\n",
    "N, M = 500, 500  # 网格采样点的个数，采样点越多，分类界面图越精细\n",
    "t1 = np.linspace(4, 8, N)  # 生成采样点的横坐标值\n",
    "t2 = np.linspace(1.5, 5, M)  # 生成采样点的纵坐标值\n",
    "print(f\"t1： 最小值{t1.min():.2f}，最大值{t1.max():.2f}，均值{t1.mean():.2f}，个数{t1.shape[0]}\")\n",
    "print(f\"t2： 最小值{t2.min():.2f}，最大值{t2.max():.2f}，均值{t2.mean():.2f}，个数{t2.shape[0]}\")\n",
    "\n",
    "x1, x2 = np.meshgrid(t1, t2)  # 生成网格采样点\n",
    "x_new = np.stack((x1.flat, x2.flat), axis=1)  # 将采样点作为测试点\n",
    "y_predict = model.predict(x_new)  # 预测测试点的值\n",
    "y_hat = y_predict.reshape(x1.shape)  # 与x1设置相同的形状"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "318bf8fa",
   "metadata": {},
   "source": [
    "画板显示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "af0e7dd8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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OhR33nknwsPD8dZbbyErKwsZGRk293H2+1ZE8HEkACQmJiItLc36PD09vc5fKHL0ww8/4Pjx4zhy5AiOHDmCAQMG4I033sAbb7yBgoICVFZW1tjntttuw9ixY/HTTz9h1apVeOeddzB+/HgP9N5xjgQAJXzfHTt2xL/+9S/s2rULO3fuxLhx4/DMM88gODgYer0eFRUVNfbp0KEDkpKSsG/fPmzevBnJycle9307EgCU8H337dsXJ06cwPLly3HhwgW8++67yMjIwKBBgxT9fVuICQBK+L4ttm/fjvvuu6/aa0r+fW4ymXDlyhXr86KiIpSUlNQ6Xgunv29Hz8nJSU5OjpCdnW19PP7448L8+fOFvLw8IT8/XzAajTX2OXLkiBASEiIcPXpUKCoqEm6//XZhwYIFHui961S9xgeAkJ6eXqNNfn6+8NhjjwlBQUFCixYthPfff1/aTrrAp59+KsTHxwvffvutsGPHDqFNmzbCqFGjBEEQhMLCQqG8vLzGPnl5eUJgYKCQmpoqlJeXC3369BGef/55qbvutFdffVUIDw8XIiMjhUmTJllrtLRo0UL48ssva7QvLy8XnnvuOSEkJERo3LixMGvWLKGiokLiXjvn6tWrgk6nE5YtWybk5OQIS5YsEQIDA4Xff/9d8d+35XbloKAgoWXLlsJXX30lCIKyv2+LHj16CB999FG115T++7ykpETw9/cXTp48We11Jf8+37BhgxAcHCwsXLhQWLNmjXD//fcLLVq0EMrLy93251sRwedG9gQAQRCE1157TfD39xd0Op3QpUsXryz8pFZiA4AgCMKyZcsEPz8/4aabbhLi4+OF3NxcCXtMzhAbAASB37c3ExsABIG/z72VyWQS3njjDaF58+aCn5+f0KlTJ+GXX34RBMF9f741glDHFUQqcOLECVy8eBE9e/b02nPCZL/s7GxkZmaiR48eCA0N9XR3yM34fasLf5+ri6N/vlUffIiIiEg9FHFxMxEREZE9GHyIiIhINRh8iIiISDUYfIiIiEg1GHyIyGMuX75c74KjVQmCgMLCQjf26C87duxAVlaWJMciIukw+BCRZO644w6sXr3a+rxDhw44efJktTYmk6lapebXXnsNb775JgAgPz8fTZs2rda2rKysxnHeeustDB06tNprp06dwgMPPIDc3Fy7+vrBBx9g7ty5drUlIu/B29mJyG2ysrLQqVMnhIeHw9fXF7m5udDpdAgODgYA5OTkoHHjxvDz84MgCLh+/TrS09MxYMAA6/pSFy5cgI+PD5o2bQqTyYRffvkFd9xxBwBz8Gnbtm2NBUsXLFiA48ePIyUlBQDwxx9/4J577sGdd96JlJSUGssgzJ8/HwsWLEBQUJD1NYPBgIqKCmt9kPLycuj1ehQXF7vlsyIiaWg93QEiUq6bb74Zer3e+jwxMREvv/wyBg8eDACIiorCjh070L59+2r7paenW/9/z5490Gq16N69O8rLy7Fw4UK8+uqrdvfhypUreOihh9CzZ0+sXLkSPj41J7pNJhOGDBmCd999F+Xl5Vi7di1GjBgBrVYLg8GAlStXYuzYsXatG0VE8sZTXUQkmREjRlgXYLx8+TI+++wztGzZska7rKwsBAcH44477sBLL72ERx99FJ999hnefvttLF26FHfccQfuuOMO6HS6Oo93+vRpdO/eHd27d8eHH35Ya+ix0Gg0KC0tRXl5OZ599llr28rKSkycONHmaTUi8i6c8SEiSezYsQMvvfQSGjVqhGHDhmHRokXw8fFBnz59cP36dezYsQODBg0CAPj6+iIqKgrPP/88AGDFihXQarXQarW455570KdPHwBAUlKS9f1LS0tRWVkJrVYLo9GIyspK6HQ6jBgxAi+//DIMBoO1bWVlpXU7YL5o2tfXFw8++KB1hqpz587WbYB5tspgMODnn3+uN3ARkXzxGh8icrsff/wRvXv3xuuvv249TfWvf/0LADBt2jQMHDgQV69exbZt29CwYUMUFxfjv//9LwBYTy917twZ169fx6lTpyAIAsrLyxEYGIhHH30UALBkyRJMnToV/v7+qKiogMlkQkBAAIxGI4xGIwIDA639qaioQO/evfHVV18BAGbOnInS0lLMnTsXJSUlCAkJwZkzZwCYr+257bbbUFlZWeeMERF5B874EJFbbdq0Cc899xxCQ0PRqlWratsuXbqEhx9+GFFRUdi7d6/14uLQ0FBkZ2dj/fr1CAgIgEajqbafIAgoLS3F+++/b31t8uTJmDx5MoDqFzcfOHAATzzxBLKzs21eo3P9+nU0bNgQgPmU1z//+U8sXrzYuv2f//wnjEYjF74kUgAGHyJym3PnzmHixIn46quvsHDhQuvrlZWVOH/+PNavX4+3334bU6ZMsYabCxcuYNOmTdDpdBg9enSd73/48GGkpaVVO+V1o27duqFJkyZ477338OKLL9baJjc3Fx07dkRycjLWr18Pk8mE8PBw6/bi4mIEBQVh/vz5YoZPRDLEeVsicpu4uDicOXMG9957LwDzKaaVK1eiffv2+Oqrr5CUlISXXnqp2oxOQEAAYmNj0aJFC+zevRuHDh1CXFxcrY/mzZsjNja2zj6UlJRgyZIlmDFjBn788cda25w9exYxMTGYPXs2Tp06hYYNG2LOnDk4cuQIli9fDqPRKOpOMiKSL874EJFbWWr2AObrdc6cOYN58+bhp59+qtausrISaWlp6N69OwYOHAgASElJwbfffosjR47U+t7r1q1D69atbR7766+/xtixY7Fx40bMmDEDffr0wcqVKzFkyBBrG71ejyNHjqBLly4AAK1Wi9WrV6N379548cUXsWTJEqxfvx4NGjRw9CMgIhlh8CEiSVjupJo3bx4A4KeffsLly5chCAI0Gg1SU1MxaNAgXLlyxVo08Isvvqj1vfLz89GgQQNERUXZ3P7ll19i48aNeOutt9ClSxfcdddd8PPzwzPPPIMPPvgA8+bNwx133IGUlBR0794dYWFhAMyFC3NyctCiRQskJSWha9eu+O233xAeHo4mTZrwji4iL8dTXUQkidLS0mp1cHr06IH9+/cjPj4ecXFxmDRpEt566y1r6KlNTk4OunfvjsTERAwYMAA33XRTre0yMzNx8803IyMjAy+88IL1ouTJkyfj8OHDiI2NxS233ALAfP3OxIkTsWHDBiQkJOCWW27Bxx9/jKlTp6KgoABJSUn473//i/79+yMiIgITJ0504adCRFLj7exE5FV27NiB2NhY3HrrrTXu9rK4du0aAgMDERISYvf7GgwGXLt2rdpaYDcqKSmBIAii3peI5IXBh4iIiFSDp7qIiIhINRh8iIiISDUYfIiIiEg1GHyIiIhINRh8iIiISDUYfIiIiEg1GHyIiIhINRh8iIiISDX+H0iOu6weoj/qAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "iris_cmap = ListedColormap([\"#ACC6C0\", \"#FF8080\", \"#A0A0FF\"])  # 设置分类界面的颜色\n",
    "plt.pcolormesh(x1, x2, y_hat, cmap=iris_cmap)  # 绘制分类界面\n",
    "# 绘制3种类别鸢尾花的样本点\n",
    "plt.scatter(x[y == 0, 0], x[y == 0, 1], s=30, c=\"g\", marker=\"^\", label=\"类别0\")  # 绘制标签为0的样本点\n",
    "plt.scatter(x[y == 1, 0], x[y == 1, 1], s=30, c=\"r\", marker=\"o\", label=\"类别1\")  # 绘制标签为1的样本点\n",
    "plt.scatter(x[y == 2, 0], x[y == 2, 1], s=30, c=\"b\", marker=\"s\", label=\"类别2\")  # 绘制标签为2的样本点\n",
    "# 设置坐标轴的名称并显示图形\n",
    "plt.rcParams[\"font.sans-serif\"] = \"Simhei\"\n",
    "plt.xlabel(\"花萼长度\")\n",
    "plt.ylabel(\"花萼宽度\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "ml-241",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.20"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
